package org.example.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Java 中如何实现线程？
 * Callable 接口从 JDK 1.5 开始新增，Runnable 从 JDK1.0 开始就有，区别在于 Callable 的 call 方法有返回值，且可以抛出异常，
 * 而 Runnable 的 run 方法没有返回值。
 *
 * @author wangMaoXiong
 * @version 1.0
 * @date 2020/10/31 13:13
 */
public class ThreadByCallable implements Callable {
    @Override
    public Object call() throws Exception {
        System.out.println("我是：" + Thread.currentThread().getName());
        return "success";
    }

    public static void main(String[] args) {
        //使用线程池性能更优
        ExecutorService executorService = Executors.newCachedThreadPool();
        for (int i = 0; i < 3; i++) {
            //execute(Runnable command)
            //submit(Callable<T> task)
            executorService.submit(new ThreadByCallable());
        }
//        依次输出：
//        我是线程：pool-1-thread-1
//        我是线程：pool-1-thread-2
//        我是线程：pool-1-thread-3
    }
}
